package com.cee.util;

import com.cee.dto.SysConfigDTO;
import com.cee.enums.YesOrNoEnum;
import com.cee.service.SysConfigService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
@Slf4j
public class SystemUtil {

    public static final String SYS_BATCH_JOB_SWITCH_IND = "SYS_BATCH_JOB_SWITCH_IND";
    public static final String DB_NAME = "db_cee_exam";

    public static SysConfigDTO getSystemConfig(String visSysCnfgId) {
        SysConfigDTO sysConfig = SpringContextUtil.getBean(SysConfigService.class).getSysConfigById(visSysCnfgId);
        if (sysConfig == null) {
            throw new IllegalStateException("'" + visSysCnfgId + "' is not configured, please check.");
        }
        return sysConfig;
    }

    public static String getStringConfigValue(String visSysCnfgId) {
        SysConfigDTO sysConfig = SpringContextUtil.getBean(SysConfigService.class).getSysConfigById(visSysCnfgId);
        if (sysConfig == null) {
            throw new IllegalStateException("'" + visSysCnfgId + "' is not configured, please check.");
        }

        log.info("getStringConfigValue: '{}'='{}'", visSysCnfgId, sysConfig.getSysCnfgText());

        return sysConfig.getSysCnfgText();
    }

    public static List<String> getListStringValue(String visSysCnfgId) {
        String stringConfigValue = getStringConfigValue(visSysCnfgId);
        if (StringUtils.isEmpty(stringConfigValue)) {
            return new ArrayList<>();
        }
        return Arrays.asList(StringUtils.split(stringConfigValue, ","));
    }

    public static Map<String, Object> getMapConfigValue(String visSysCnfgId) {
        String stringConfigValue = getStringConfigValue(visSysCnfgId);
        if (StringUtils.isEmpty(stringConfigValue)) {
            return new HashMap<>();
        }
        return JsonUtil.parse(stringConfigValue, Map.class);
    }

    public static boolean getBooleanConfigValue(String visSysCnfgId) {
        String configValue = getStringConfigValue(visSysCnfgId);
        return YesOrNoEnum.YES.getCode().equals(configValue);
    }

    public static long getLongConfigValue(String visSysCnfgId) {
        String configValue = getStringConfigValue(visSysCnfgId);
        return Long.valueOf(configValue);
    }

/**
     * Gets object config value.
     *
     * @param <T>      the type parameter
     * @param configId the config id
     * @param tClass   the t class
     * @return the object config value
     *//*

    public static <T> T getObjectConfigValue(final String configId, final Class<T> tClass) {
        String json = getStringConfigValue(configId);
        return JsonUtil.parse(json, tClass);
    }

    public static <T> List<T> getObjectsConfigValue(final String configId, final Class<T> tClass) {
        String json = getStringConfigValue(configId);
        return JsonUtil.parseList(json, tClass);
    }
*/

}
